package com.kclm.se.io;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/****
 * @author yejf
 * @since JDK8.0
 * @CreateDate 2020年8月27日 下午4:53:49 
 * @description 此类用来描述了 BIO 操作，也就是阻塞的IO操作
 *
 */
public class SocketBIO {

	public static void main(String[] args) throws Exception {
		//1.创建ServerSocket,端口为9090
		int port = 9090;
		ServerSocket server = new ServerSocket(port, 20);
		System.out.printf("Step1: 服务器已经启动，在[%d]端口监听\n",port);
		//
		while(true) {
			//2.监听客户端的连接
			Socket client = server.accept(); //阻塞方法
			System.out.printf("Step2: 有一个客户端连接上来：[%d]\n", client.getPort());
			//3. 创建一个服务线程
			new Thread( () -> {
				try(InputStream in = client.getInputStream();
						BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
					//循环读取
					while(true) {
						String line = reader.readLine(); //阻塞2
						//判断
						if(line != null) {
							System.out.println(line);
						} else {
							//关闭
							client.close();
							System.out.println("socket关闭："+client.getInetAddress());
							break;
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			} ).start();
		}
	}
}
